package cn.tedu.tickets;

/**
 * @author :Colin
 * @version 创建时间: 2021/6/23 10:05
 * 需求：`设计多线程编程模型，4个窗口共卖100张票
 * 本类通过继承thread类的方式完成多线程编程案例
 */
public class TestTicketThread {
    public static void main(String[] args) {
        TicketThread t1 = new TicketThread("狗");
        TicketThread t2 = new TicketThread("蚂蚁");
        TicketThread t3 = new TicketThread("泥鳅");
        TicketThread t4 = new TicketThread("蚯蚓");
        t1.start();
        t2.start();
        t3.start();
        t4.start();
    }
}
class TicketThread extends Thread{
    //将票数设置为静态被所有对象共享，否则有几个线程就卖几百张票
    static int tickets = 100;/*静态资源属于类资源，被全局所有资源共享只有一份*/

    public TicketThread(String name) {
        super(name);
    }

    @Override
    public void run() {

        //super.run();
        while(true){

            /*我们可以认为让程序休眠10ms，为的是增加线程切换的概率
            问题1：重卖现象，同一张票卖给了两个人
            问题2：超卖现象，票数出现了0，-1，-2，超出了实际售卖票数
             */

            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            if(tickets<=0)
                break;

            //打印下当前正在售票的线程名字，并且票数-1
            System.out.println(getName()+"="+tickets--);

            //一定设置循环出口，判断票没了就停止售票


        }

    }
}